/***************************************************************************************************
 *Copyright(C),2010-2017,Sumscope
 *FileName	:  tType.h
 *Author	:  scofined.qi
 *Version	:  1.0
 *Date		:  2017/04/05
 *Desc		:  //用于主要说明此程序文件完成的主要功能
 *Relation :
 *Others	:  //其他内容说明
 *Function :  //主要函数列表，每条记录应包含函数名及功能简要说明
 *History	:
 * //修改历史记录列表，每条修改记录应包含修改日期、修改者及修改内容简介
 ***************************************************************************************************/
#pragma once

#include <core/Utility.h>
#include <string.h>

#include <string>

namespace qb {
namespace ht {
struct BondInfoKey {
  char BondKey[35 + 1];      // 债券key B0000332012CORLEB01
  char ListedMarket[3 + 1];  // 市场代码 CIB/SSE/SZE
};
typedef struct ST_BOND_LIST {
  union {
    char ComBondKey[40];
    BondInfoKey Key;
  };
  char BondID[32 + 1];             // 债券代码 1280197
  char ShortName[128 + 1];         // 债券简称 12北京建工债
  char BondSubType[3 + 1];         // 债券类型 LEB/LMN/LCP...
  char Guarantee[32 + 1];          // 担保类型
  char TermToMaturity[32 + 1];     // 剩余期限
  char ListDate[10 + 1];           // 上市日期
  char MaturityDate[10 + 1];       // 到期日
  char OptionDate[10 + 1];         // 行权日期
  char IssuerRating[32 + 1];       // 主体评级，发行人评级
  char BondRating[32 + 1];         // 债项评级
  char InstitutionRating[32 + 1];  // 主体评级，含AAA+
  char RateType[32 + 1];           // 评级类型 FIXED
  char Coupon_Type[8 + 1];         // 利率方式
  char MarketType[32 + 1];         // 市场类型
  char InterestStartDate[32];      // 起息日
  char IsMortgate;                 // 是否质押
  char IsCrossMarket;              // 是否跨市场
  char InstitutionSubtype[3 + 1];  // 机构类型 LGE/PVE...
  char YieldCurveType[32 + 1];     // 收益率曲线标识
  char IsMunicipal;                // 是否城投债 Y/N/NULL
  char BondFullName[96 + 1];       // 债券全称
  char MaturityTerm[9 + 1];        // 债券期限
  char OptionType[7 + 1];          // 期权类型
  char Issuer_Code[7 + 1];         // 发行人代码
  char FullNameEN[128];            // 英文全称
  char ShortNameEN[64];            // 英文简称
  char Outlook[8];                 // 展望		V11
  char Ent_Cor[8];                 // 公司债	V11
  char Coupon_Frequency[3 + 1];    // 付息频率 V15
  char Compound_Frequency[3 + 1];  // 计息频率 V15
  int No_Add_Issue;                // 第几次增续发 V15
  char Planned_Exercise_Date[9];   // 下一行权日 20160102
  char Next_Coupon_Date[9];        // 下一付息日 20160102
  char conversion_rate[16];        // 质押比例 107.54
  char Issue_Rate[16];             // 发行收益率，参考收益率 2.6246
  char FRN_Index_ID[16 + 1];       // 基准利率代码
  char Fixing_MA_Days[4 + 1];      // 基准利率计算周期（平均）
  char Issuer_Rating_Institution_Code[8 + 1];  // 发行人评级机构代码
  double Outstanding_Amount;                   // 债券余额
  char Interest_Basis[3 + 1];                  // 利息基础
  char IssuerRatingCBR[12 + 1];                // 中债资信评级
  char OutlookCBR
      [12 +
       1];  // 展望评级状态：STB-稳定;NEG-负面;RWT-列入观察名单;POS-正面;NON-无
  char CDC_Implied_Rating[12 + 1];  // 中债隐含评级
  char CSI_Implied_Rating[12 + 1];  // 中证隐含评级
  char Currency[8];                 // 货币种类,CNY,USD等
  char Warranter[64];               // 担保人
  char bond_tag[32];                // 标签，绿色，碳中和等
  int pay_date;                     // 实际兑付日
  char Sceniority[4];               // 次级债字段
  char Category_flag[32];           // 专项债类型
  char Flag;     // 不写入文件,D:删除 U:更新 I:插入
  int Sequence;  // 变更序列号
} BOND_LIST;

typedef struct ST_BOND_PRIMARY_INFO {
  union {
    char ComBondKey[40];
    BondInfoKey Key;
  };
  double PlannedIssueAmount;      // 预期发行量
  double Actual_Issue_Amount;     // 实际发行量
  char PaymentDate[8 + 1];        // 缴款日
  char CouponRateCurrent[12];     // 中标价格
  char AuctionDateStart[8 + 1];   // 招标建档起始日
  char AuctionDateEnd[8 + 1];     // 招标建档截止日
  char Auction_Date_Time[8 + 1];  // 公告日期
  char AnnounceDate[8 + 1];       // 公告日期
  char IssueStartDate[8 + 1];     // 发行起始日
  char IssueEndDate[8 + 1];       // 发行截止日
  char Issue_End_Time[8 + 1];     // 发行截止时间
  char Issue_Period[16 + 1];      // 募集周期
  char Underwriters[500];         // 承销商，逗号分隔
  char Bid_Limit_Bottom[16 + 1];  // 投标区间下限
  char Bid_Limit_Top[16 + 1];     // 投标区间上限
  char Auction_Flr[16 + 1];       // 标位下限
  char Auction_Cap[16 + 1];       // 标位上限
  char Auction_Step[16 + 1];      // 步长
  char Auction_Unit[8 + 1];       // 标位单位
  char MainUnderwriters[100];     // 主承销商
  char JointUnderwriters[100];    // 联席承销商
  int BondFileNum;                // 可下载文件数量
  char Auction_Type[8 + 1];       // 发行方式
  int Auction_Time_Start;         // 发行开始时间
  int Auction_Time_End;           // 发行结束时间
  char Issue_Type[8 + 1];         // 招标方式
  char Asset_Status[8 + 1];  // 资产类型 PRI-私募，PUB-小公募，NULL-公募
  char Type[8 + 1];          // 偿还方式
  char Flag;                 // 不写入文件,D:删除 U:更新 I:插入
  int Sequence;              // 变更序列号
} BOND_PRIMARY_INFO;

typedef struct ST_BOND_ADDITION_INFO {
  int No_Add_Issue;                    // 第几次增续发
  char First_Issue_Key[36];            // 原券Bondkey
  char Add_Issue_Key[36];              //***增续发券BondKey
  char Add_Full_Name[96 + 1];          // 增续发券全称
  char Add_Announce_Date[8 + 1];       // 增续发公告日期
  char Add_Auction_Date[8 + 1];        // 增续发招标建档日
  char Add_Issue_Start_Date[8 + 1];    // 增续发发行起始日
  char Add_Issue_End_Date[8 + 1];      // 增续发发行结束日
  char Add_Dist_Date_Start[8 + 1];     // 增续发分销开始日
  char Add_Dist_Date_End[8 + 1];       // 增续发分销结束日
  char Add_Payment_Date[8 + 1];        // 增续发承销缴款日
  char Add_Listed_Date[8 + 1];         // 增续发上市日
  double Add_Issue_Commission_Rate;    // 增/续发手续费率(%)
  double Add_Issue_Price;              // 增/续标售价格(元)
  double Add_Planned_Issue_Amount;     // 计划增/续发总额(万元)
  double Add_Issue_Amount;             // 实际增/续发总额(万元)
  char Reason[500];                    // 增续发原因
  char Add_Issue_ID[32 + 1];           // 增/续发债券代码
  char Add_Issue_Short_Name[128 + 1];  // 增续发券简称
  char First_Issue_ID[16 + 1];         // 原券代码
  char Mkt_Type[3 + 1];                // 市场类型
  char Ann_Status[2];                  // 流通要素状态
  char Bid_Outcome[16];      // 发行收益率，参考收益率 2.6246
  char Auction_Type[8 + 1];  // 发行方式
  int Auction_Time_Start;    // 发行开始时间
  int Auction_Time_End;      // 发行结束时间
  int Sequence;              // 变更序列号
  char Flag;
} BOND_ADDITION_INFO;

typedef struct ST_BOND_OPTION_INFO {
  union {
    char ComBondKey[40];
    BondInfoKey Key;
  };
  char CallStr[200];   // 赎回行权日期，20171130|100|20180531|100
  char PutStr[200];    // 回售行权日期，20180827|100|20210827|100
  char OptionType[8];  // eform / option_exercise_info 表中 option_type字段
  char Flag;           // 不写入文件,D:删除 U:更新 I:插入
  int Sequence;        // 变更序列号
} BOND_OPTION_INFO;

typedef struct ST_BOND_AUCTION_INFO {
  char Bond_Key[34];
  int Auction_Time_Start;        // 招标时间起
  int Auction_Time_End;          // 招标时间止
  double Planed_Auction_Amount;  // 计划发行量
  double Actual_Auction_Amount;  // 实际发行量
  double WA_Tender_Rate;         // 加权利率
  double MG_Tender_Rate;         // 边际利率
  double Subscription_Ratio;     // 全场倍数
  double Marginal_Ratio;         // 边际倍数
  char Flag;
  int Sequence;  // 变更序列号
} BOND_AUCTION_INFO;

typedef struct ST_BOND_CONVERSION {
  union {
    char ComBondKey[40];
    BondInfoKey Key;
  };
  char ConversionRate[16];  // 质押比例 107.54
  char Flag;                // 不写入文件,D:删除 U:更新 I:插入
  int Sequence;             // 变更序列号
} BOND_CONVERSION;

typedef struct ST_BOND_DEFAULTED {
  union {
    char ComBondKey[40];
    BondInfoKey Key;
  };
  char Flag;     // 不写入文件,D:删除 U:更新 I:插入
  int Sequence;  // 变更序列号
} BOND_DEFAULTED;

typedef struct ST_BOND_DICT {  //
  char Key[68];                // Selective_Code + Group_Name
  char Selective_Code[32];
  char Selective_Content[512];
  char Selective_Content_EN[512];
  char SortCode[4];
  char Group_Name[32];
  char Group_Name_Original[32];      // 原始数据组名
  char Selective_Code_Original[32];  // 原始数据代码
  char Flag;
  int Sequence;  // 变更序列号
} BOND_DICT;

typedef struct ST_BOND_HOLIDAY {  //
  char Key[24];                   // Country,Market,Holiday)
  char Country[8];
  char Market[8];
  int Holiday;
  char Status[4];
  char Flag;
  char HolidayReason[32];
  int Sequence;  // 变更序列号
} BOND_HOLIDAY;

class DICT_MACRO_INDEX {
 public:
  char Key[64];  // Code|Value|Date,EndDate
  char Code[32];
  double Value;
  int Date;
  int EndDate;
  int Sequence;  // 变更序列号
  char Flag;
  bool operator<(const DICT_MACRO_INDEX& obj) const {
    if (Date < obj.Date)
      return true;
    else
      return false;
  }
  DICT_MACRO_INDEX& operator=(const DICT_MACRO_INDEX& rhs) {
    FIELDCOPY(Code, rhs.Code);
    Value = rhs.Value;
    Date = rhs.Date;
    EndDate = rhs.EndDate;
    Flag = rhs.Flag;
    return *this;
  }
  bool operator==(const DICT_MACRO_INDEX& rhs) const {
    return ((strcmp(Code, rhs.Code) == 0) && Value == rhs.Value &&
            Date == rhs.Date && EndDate == rhs.EndDate && Flag == rhs.Flag);
  }
};

typedef struct ST_QB_ISSUERINFO {
  char Institution_Code[7 + 1];          // 发行人代码
  char Full_Name_C[80 + 1];              // 发行机构全称
  char Issuer_Type[16 + 1];              // 机构类型
  char SW_Sector_Code[16 + 1];           // 一级行业代码
  char SW_Subsector_Code[16 + 1];        // 二级行业代码
  char SW_Sector_Code_2021[16 + 1];      // 2021版申万行业代码
  char Province_Code[16 + 1];            // 区域代码
  char Short_Name_C[80 + 1];             // 中文简称
  char Full_Name_E[256 + 1];             // 英文全称
  char Short_Name_E[80 + 1];             // 英文简称
  char Listed_Type[15 + 1];              // 上市公司
  char Actual_Controller_Name[128 + 1];  // 实际控制人
  char Actual_Controller_Type[16 + 1];   // 实际控制人类型
  char Rate[10 + 1];                     // 评级
  char CBRC_Financing_Platform[8];  // 银监会投融资平台，Y = 平台债
  char Municipal_code[16 + 1];      // 市区级
  char Issuer_tag[10];              // 主体信息
  char Flag;
  int Sequence;  // 变更序列号
} QB_ISSUERINFO;

typedef struct ST_QB_PROVINCEINFO {
  char Area_Code[16 + 1];          // 区域代码
  char Area_Name[64 + 1];          // 区域中文名称
  char Area_English_Name[64 + 1];  // 区域英文名称
  char Area_Level[16 + 1];
  char Area_Upper_Grade_Code[16 + 1];
  char Flag;
  int Sequence;  // 变更序列号
} QB_PROVINCEINFO;

typedef struct ST_QB_SWSECTORINFO {
  char SW_Internal_Code[16 + 1];     // 行业代码
  char SW_Level;                     // 行业level
  char SW_Name[64 + 1];              // 行业中文名称
  char SW_English_Name[64 + 1];      // 行业英文名称
  char SW_Upper_Grade_Code[16 + 1];  // 上级行业代码
  char Flag;
  int Sequence;  // 变更序列号
} QB_SWSECTORINFO;

typedef struct ST_QB_UNDERWRITER {
  char UnderwriterUuid[32 + 1];  // 承销商id
  char UnderwriterCode[10 + 1];  // 承销商code
  char Short_Name_C[64 + 1];     // 中文简称
  int Order;                     // 排序
  char Flag;
  int Sequence;  // 变更序列号
} QB_UNDERWRITER;

typedef struct ST_QB_FINANCIAL_COMPANY {
  char CompanyID[33];      // 机构ID
  char CompanyCode[33];    // 机构代码
  char Name[65];           // 简称
  char Full_Name[256];     // 全称
  char Name_En[65];        // 英文简称
  char Full_Name_En[256];  // 英文全称
  char City_Name[65];      // 城市
  char Flag;
  int Sequence;  // 变更序列号
} QB_FINANCIAL_COMPANY;

typedef struct ST_QB_CONTINUOUS_CONTRACT_INFO {
  char ID[17];       // 键值
  char TFCKey[33];   // 连续合约Key
  char TFCID[33];    // 连续合约代码
  char TFCName[65];  // 连续合约的名称
  char TFID[33];     // 连续合约对应的实际合约代码
  char TFCDate[11];  // 连续合约切换日期
  char Flag;
  int Sequence;  // 变更序列号
} QB_CONTINUOUS_CONTRACT_INFO;

typedef struct ST_QB_EXCHANGEREPO_INFO {
  char RateKey[16];
  char ID[8];
  char Code[8];
  char Name[64];
  char ListedMarket[8];
  char Flag;
  int Sequence;  // 变更序列号
} QB_EXCHANGEREPO_INFO;

typedef struct ST_QB_BONDCDCAUTH {
  char BondKey[35 + 1];  // 债券key B0000332012CORLEB01
  // char ListedMarket[3 + 1];			//市场代码 CIB/SSE/SZE
  char BondID[32 + 1];   // 债券代码 1280197
  char BondProperty[4];  // 债券性质
  char Custodian[4];     // 托管机构
  char CDCAuth[4];       // 中债权限
  char Flag;
  int Sequence;  // 变更序列号
} QB_BONDCDCAUTH;

typedef struct ST_BOND_CRM_CLAUSE {  // CRM
  char Bond_Key[33];
  char Reference_Code[33];       // 参考实体, 对应IssuerID
  char Settlement_Modes[128];    // 结算方式
  char Settlement_ModesEn[128];  // 结算方式英文
  char Registration_Date[9];     // 凭证登记日
  double First_Issue_Amount;     // 预配售额
  char Creater_Code[128 + 1];    // 创设机构, 对应IssuerID
  char Refer_Bond_Key[256];      // 参考债券，对应ComboBondKey
  char Refer_Bond_Id[256];       // 参考债券，对应BondShortName
  char Credit_Event[256];        // 信用事件
  char Credit_EventEn[256];      // 信用事件英文
  char Flag;
  int Sequence;  // 变更序列号
} QB_BONDCRM;

typedef struct ST_QB_ABSBOND {
  char Bond_Key[33];
  char ABS_ID[33];         // abs_id
  char Tranche_Class[33];  // 产品结构，优先级，次优级，次级
  char Series_Name[33];    // 系列
  char Issuer_Code[33];    // 发行人
  char ABS_Type1[33];
  char ABS_Type2[33];
  char ABS_Type3[33];
  char Actual_Financier[64];  // 实际融资人
  char Credit_Subject[64];    // 信用主体
  char Flag;
  int Sequence;  // 变更序列号
} QB_ABSBOND;

typedef struct ST_QB_MAIN_UNDERWRITER {
  char Institution_Code[7 + 1];  // 发行人代码
  char Full_Name_C[80 + 1];      // 发行机构全称
  char Short_Name_C[80 + 1];     // 中文简称
  char Full_Name_E[256 + 1];     // 英文全称
  char Short_Name_E[80 + 1];     // 英文简称
  char Flag;
  int Sequence;  // 变更序列号
} QB_MAIN_UNDERWRITER;

typedef struct ST_BOND_KONGFU {
  char ISIN_Code[33];                 // ISIN
  char Short_Name_C[80 + 1];          // 债券名称
  char Issuer_Name[128 + 1];          // 信用主体
  char Maturity_Date[8 + 1];          // 到日期
  char Interest_Accrual_Date[8 + 1];  // 起息日
  char Outstanding_Amount[32];        // 未偿还债
  char Issued_Amount[32];
  char Next_Put_Date[8 + 1];   // 下一个回售日
  char Next_Call_Date[8 + 1];  // 下一个赎回日
  char Lowest_Rating[80 + 1];  // 最低债项评级
  char Flag;
  int Sequence;  // 变更序列号
} BOND_KONGFU;

typedef struct ST_SPECIAL_LABEL_INFO {
  char id[16 + 1];         // 标签id
  char label[32 + 1];      // 标签名称 偏/权/违/次等
  char color[16 + 1];      // 标签名称颜色 0xFF172422
  int property;            // 标签属性 交易/债券/条款
  char comments[256 + 1];  // 标签注释说明
  int label_order;         // 标签排序
  char Flag;
  int Sequence;  // 变更序列号
} SPECAIL_LABEL_INFO;

struct BondLabelKey {
  char bond_key[40];  // 债券key B0000332012CORLEB01.CIB
  char label_id[16];  // 标签ID
};

typedef struct ST_BOND_SPECIAL_LABEL {
  union {
    char bond_label[56];
    BondLabelKey Key;
  };
  char label_tip[256 + 1];  // 标签Tips
  int label_order;          // 标签排序
  char Flag;                // 不写入文件,D:删除 U:更新 I:插入
  int Sequence;             // 变更序列号
} BOND_SPECIAL_LABEL;
}  // namespace ht
}  // namespace qb
